import json
import os
from typing import List, Dict, Any
from langchain_core.messages import HumanMessage, SystemMessage
from utils import get_deepseek_model
from json_format_wf import preprocess_from_file


def run_sentence_check(input_path: str = None) -> Dict[str, List[str]]:
    """
    调用LLM进行语义完整性评估和医学逻辑校验
    
    Args:
        input_path: 病历JSON文件路径
        
    Returns:
        包含内容不合理项的字典
    """
    # if input_path is None:
    #     input_path = os.path.join(os.path.dirname(__file__), "data", "1.json")
    
    # 预处理病历数据为文本格式
    medical_text = preprocess_from_file(input_path)
    
    # 获取LLM模型
    model = get_deepseek_model()
    
    # 构造系统提示词
    system_prompt = """你是一名专业的病历质控专家，请根据以下两个维度对病历内容进行评估：

1. 语义完整性评估（"写了，但写够了吗？"）：
   - 判断文本内容的"实质性"完整性
   - 检查各字段描述是否充分、具体
   - 识别过于简单、模糊或缺乏关键信息的描述

2. 规范性与医学逻辑校验（"写得对吗？"）：
   - 检查描述是否符合医学术语规范
   - 诊断和治疗是否符合临床逻辑和指南
   - 识别医学逻辑错误或不合理的描述

请仅输出不合理的字段及其原因，格式为：
患者信息.现住址 描述不完整，应包含具体的省市区和街道信息
患者信息.联系电话 不能为空，应为11位数字
病情信息.辅助检查 描述缺失，应包含相关检查项目和结果

严格按照"字段路径 描述问题"的格式输出，一行一个。"""

    # 构造用户提示词
    user_prompt = f"请对以下病历内容进行质量评估：\n\n{medical_text}"
    
    # 调用LLM
    messages = [
        SystemMessage(content=system_prompt),
        HumanMessage(content=user_prompt)
    ]
    
    response = model.invoke(messages)
    content = response.content.strip()
    
    # 解析结果
    unreasonable_list = []
    if content:
        lines = content.split('\n')
        for line in lines:
            line = line.strip()
            if line and not line.startswith(('```', '#', '-', '*')):
                unreasonable_list.append(line)
    
    return {"内容不合理列表": unreasonable_list}


# def main():
#     """主函数，用于测试sentence check工作流"""
#     result = run_sentence_check()
#     print(result)
#     # print(json.dumps(result, ensure_ascii=False, indent=2))


# if __name__ == "__main__":
#     main()